package com.ruoyi.system.service.impl;

import java.util.ArrayList;
import java.util.List;

import cn.hutool.core.bean.BeanUtil;
import com.ruoyi.system.domain.SysOcrTemplatePoint;
import com.ruoyi.system.mapper.SysOcrTemplatePointMapper;
import com.ruoyi.system.service.ISysOcrTemplatePointService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.SysOcrTemplatePlaceMapper;
import com.ruoyi.system.domain.SysOcrTemplatePlace;
import com.ruoyi.system.service.ISysOcrTemplatePlaceService;

/**
 * 【请填写功能名称】Service业务层处理
 * 
 * @author ruoyi
 * @date 2024-11-29
 */
@Service
public class SysOcrTemplatePlaceServiceImpl implements ISysOcrTemplatePlaceService 
{
    @Autowired
    private SysOcrTemplatePlaceMapper sysOcrTemplatePlaceMapper;
    @Autowired
    private ISysOcrTemplatePointService pointsService;

    /**
     * 查询【请填写功能名称】
     * 
     * @param placeId 【请填写功能名称】主键
     * @return 【请填写功能名称】
     */
    @Override
    public SysOcrTemplatePlace selectSysOcrTemplatePlaceByPlaceId(Long placeId)
    {
        return sysOcrTemplatePlaceMapper.selectSysOcrTemplatePlaceByPlaceId(placeId);
    }

    /**
     * 查询【请填写功能名称】列表
     * 
     * @param sysOcrTemplatePlace 【请填写功能名称】
     * @return 【请填写功能名称】
     */
    @Override
    public List<SysOcrTemplatePlace> selectSysOcrTemplatePlaceList(SysOcrTemplatePlace sysOcrTemplatePlace)
    {
        return sysOcrTemplatePlaceMapper.selectSysOcrTemplatePlaceList(sysOcrTemplatePlace);
    }
    @Override
    public List<SysOcrTemplatePlace> selectSysOcrTemplatePlaceListAll(SysOcrTemplatePlace sysOcrTemplatePlace)
    {
        return sysOcrTemplatePlaceMapper.selectSysOcrTemplatePlaceListAll(sysOcrTemplatePlace);
    }

    /**
     * 新增【请填写功能名称】
     * 
     * @param sysOcrTemplatePlace 【请填写功能名称】
     * @return 结果
     */
    @Override
    public int insertSysOcrTemplatePlace(SysOcrTemplatePlace sysOcrTemplatePlace)
    {
        return sysOcrTemplatePlaceMapper.insertSysOcrTemplatePlace(sysOcrTemplatePlace);
    }
    public int insertOrUpdateSysOcrTemplatePlace(SysOcrTemplatePlace sysOcrTemplatePlace){
        if (sysOcrTemplatePlace.getPlaceId()==null){
            return this.insertSysOcrTemplatePlace(sysOcrTemplatePlace);
        }else {
            SysOcrTemplatePlace place = this.selectSysOcrTemplatePlaceByPlaceId(sysOcrTemplatePlace.getPlaceId());
            BeanUtil.copyProperties(sysOcrTemplatePlace, place);
            return this.updateSysOcrTemplatePlace(place);
        }
    }

    /**
     * 新增【请填写功能名称】
     *
     * @param places 【请填写功能名称】
     * @return 结果
     */
    @Override
    public void insertSysOcrTemplatePlaces(List<SysOcrTemplatePlace> places) {
        if (places.size()>0){
            //准备旧数据,完成后进行删除
            SysOcrTemplatePlace p = places.get(0);
            SysOcrTemplatePlace param = new SysOcrTemplatePlace();
            param.setTemplateId(p.getTemplateId());
            List<SysOcrTemplatePlace> oldPlaces = selectSysOcrTemplatePlaceListAll(param);
            List<SysOcrTemplatePoint> oldPoints = new ArrayList<>();
            for (SysOcrTemplatePlace oldPlace : oldPlaces) {
                oldPoints.addAll(oldPlace.getPoints());
            }
            //每次都是插入新数据,一会旧数据直接删掉
            for (SysOcrTemplatePlace place : places) {
//                this.insertOrUpdateSysOcrTemplatePlace(place);
                place.setPlaceId(null);
                this.insertSysOcrTemplatePlace(place);
            }
            for (SysOcrTemplatePlace place : places) {
                List<SysOcrTemplatePoint> points = place.getPoints();
                Long placeId = place.getPlaceId();
                for (int i = 0; i < points.size(); i++) {
                    SysOcrTemplatePoint point = points.get(i);
                    point.setPointId(null);
                    point.setPointSort((long) i);
                    point.setPlaceId(placeId);
                    pointsService.insertSysOcrTemplatePoint(point);

//                    pointsService.insertOrUpdateSysOcrTemplatePoint(point);
                }
            }
            //插入成功后,删掉旧数据
            this.deleteSysOcrTemplatePlaceByPlace(oldPlaces);
            pointsService.deleteSysOcrTemplatePointByPoints(oldPoints);
        }
    }

    /**
     * 修改【请填写功能名称】
     * 
     * @param sysOcrTemplatePlace 【请填写功能名称】
     * @return 结果
     */
    @Override
    public int updateSysOcrTemplatePlace(SysOcrTemplatePlace sysOcrTemplatePlace)
    {
        return sysOcrTemplatePlaceMapper.updateSysOcrTemplatePlace(sysOcrTemplatePlace);
    }

    /**
     * 批量删除【请填写功能名称】
     * 
     * @param placeIds 需要删除的【请填写功能名称】主键
     * @return 结果
     */
    @Override
    public int deleteSysOcrTemplatePlaceByPlaceIds(Long[] placeIds)
    {
        return sysOcrTemplatePlaceMapper.deleteSysOcrTemplatePlaceByPlaceIds(placeIds);
    }

    @Override
    public int deleteSysOcrTemplatePlaceByPlace(List<SysOcrTemplatePlace> places) {
        List<Long> idList = new ArrayList<>();
        for (SysOcrTemplatePlace place : places) {
            idList.add(place.getPlaceId());
        }
        Long[] idArr = idList.toArray(new Long[0]);
        return deleteSysOcrTemplatePlaceByPlaceIds(idArr);
    }

    /**
     * 删除【请填写功能名称】信息
     * 
     * @param placeId 【请填写功能名称】主键
     * @return 结果
     */
    @Override
    public int deleteSysOcrTemplatePlaceByPlaceId(Long placeId)
    {
        return sysOcrTemplatePlaceMapper.deleteSysOcrTemplatePlaceByPlaceId(placeId);
    }
}
